﻿using System;
using Castle.ActiveRecord;
using Sobam.Models.Common;
using System.Collections.Generic;
using NHibernate.Criterion;
using System.Security.Cryptography;
using System.Text;

namespace Sobam.Models
{
    [ActiveRecord("pagina_anexo")]
    public class PaginaAnexo : ModelBase<PaginaAnexo>
    {
        #region Atributos
        private String _url;
        private String _nomeLink;
		private Pagina _pagina;
        private String _urlTemp;
        #endregion Atributos

        #region Construtores
        public PaginaAnexo()
        {
        }
        #endregion Construtores

        #region Propriedades

        [Property("url", NotNull = false, Length = 500)]
        public String Url
        {
			get { return _url; }
            set { _url = value; }
        }
        [Property("nomeLink", NotNull = true, Length = 200)]
        public String NomeLink
        {
            get { return _nomeLink; }
            set { _nomeLink = value; }
        }

        [BelongsTo("paginaId", NotNull = true)]
        public Pagina Pagina
        {
            get { return _pagina; }
            set { _pagina = value; }
        }
        public String UrlTemp
        {
            get { return _urlTemp; }
            set { _urlTemp = value; }
        }
        public String NomeOriginal
        {
            get { return _url.Substring(_url.IndexOf("_") + 1); }            
        }
        #endregion Propriedades

        #region Métodos
        /// <summary>
        /// Salva o anexo no banco de dados.
        /// </summary>
        public void Salvar()
        {

            try
            {
                base.Salvar();
            }
            catch (Exception ex)
            {
                Sobam.Common.Log.Logger.Log(ex);
                throw new ModelException("Salvar() PaginaAnexoException", ex);
            }
        }

        /// <summary>
        /// Obtem um anexo através do id unico 
        /// </summary>
        /// <param name="Id">id do anexo</param>
        /// <returns>Instância de anexo</returns>
        public static PaginaAnexo ObterPorId(int Id)
        {
            try
            {
                return ModelBase<PaginaAnexo>.ObterPorId(Id);
            }
            catch (Exception ex)
            {
                Sobam.Common.Log.Logger.Log(ex);
                throw new ModelException("ObterPorId(int) PaginaAnexoException", ex);
            }
        }
        public static List<PaginaAnexo> ObterAnexosPorPagina(Pagina pagina)
        {
            try
            {
                return new List<PaginaAnexo>(FindAll(Expression.Eq("Pagina", pagina)));
            }
            catch (Exception ex)
            {
                Sobam.Common.Log.Logger.Log(ex);
                throw new ModelException("ObterAnexosPorPagina(Pagina) PaginaAnexoException", ex);
            }            
        }        
        #endregion Métodos        
    }
}
